package com.czmini.cztest.service.impl;

import com.czmini.cztest.constants.UserConstants;
import com.czmini.cztest.dao.ZcTestCaseMapper;
import com.czmini.cztest.dto.PageTableRequest;
import com.czmini.cztest.dto.PageTableResponse;
import com.czmini.cztest.dto.ResultDto;
import com.czmini.cztest.dto.testcase.QueryTestCaseListDto;
import com.czmini.cztest.entity.ZcTestCase;
import com.czmini.cztest.entity.ZcTestUser;
import com.czmini.cztest.service.ZcTestCaseService;
import com.sun.org.apache.regexp.internal.RE;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

/**
 * @ProjectName: cztest
 * @Package: com.czmini.cztest.service.impl
 * @ClassName: ZcTestCaseServiceImpl
 * @Author: 还是那个橙子
 * @Description:
 * @Date: 2022/3/25 17:28
 * @Version: 1.0
 */
@Service
@Slf4j
public class ZcTestCaseServiceImpl implements ZcTestCaseService {

    @Autowired
    private ZcTestCaseMapper zcTestCaseMapper;

    @Override
    public ResultDto<ZcTestCase> save(ZcTestCase zcTestCase) {
    //    Integer createUserId = zcTestCase.getCreateUserId();
        zcTestCase.setCreateTime(new Date());
        zcTestCase.setUpdateTime(new Date());
        zcTestCase.setDelFlag(UserConstants.DEL_FLAG_ONE);

        zcTestCaseMapper.insertUseGeneratedKeys(zcTestCase);
        return ResultDto.success("添加成功",zcTestCase);
    }

    /**
     * 修改测试用例
     * @param zcTestCase
     * @return
     */
    @Override
    public ResultDto<ZcTestCase> update(ZcTestCase zcTestCase) {
        ZcTestCase queryTestCase = new ZcTestCase();
        queryTestCase.setId(zcTestCase.getId());
        queryTestCase.setCreateUserId(zcTestCase.getCreateUserId());
        queryTestCase.setDelFlag(UserConstants.DEL_FLAG_ONE);

        ZcTestCase result = zcTestCaseMapper.selectOne(queryTestCase);
        if (Objects.isNull(result)){
            return  ResultDto.fail("未查询相关用例");
        }
        zcTestCase.setCreateTime(result.getCreateTime());
        zcTestCase.setUpdateTime(new Date());
        zcTestCase.setDelFlag(UserConstants.DEL_FLAG_ONE);

        zcTestCaseMapper.updateByPrimaryKey(zcTestCase);

        return  ResultDto.success("成功");
    }

    @Override
    public ResultDto<PageTableResponse<ZcTestCase>> list(PageTableRequest<QueryTestCaseListDto> pageTableRequest) {
        // 分页查询
        QueryTestCaseListDto pageTableRequestParams = pageTableRequest.getParams();
        Integer pageNum = pageTableRequest.getPageNum();
        Integer pageSize = pageTableRequest.getPageSize();
        // 总数
        Integer countTotal = zcTestCaseMapper.count(pageTableRequestParams);
        //分页查询数据
        List<ZcTestCase> zcTestCaseList = zcTestCaseMapper.list(pageTableRequestParams, (pageNum - 1) * pageSize, pageSize);

        PageTableResponse<ZcTestCase> zcTestCasePageTableResponse = new PageTableResponse<>();
        zcTestCasePageTableResponse.setRecordsTotal(countTotal);
        zcTestCasePageTableResponse.setData(zcTestCaseList);

        return ResultDto.success("成功",zcTestCasePageTableResponse);
    }

    /**
     * 根据id查询测试用例信息
      * @param caseId
     * @return
     */
    @Override
    public ResultDto<ZcTestCase> getById(Integer caseId,Integer createUserId) {
        ZcTestCase queryZctestcase = new ZcTestCase();   //通过查询条件
        queryZctestcase.setId(caseId);
        queryZctestcase.setCreateUserId(createUserId);
        queryZctestcase.setDelFlag(UserConstants.DEL_FLAG_ONE);

        ZcTestCase result = zcTestCaseMapper.selectOne(queryZctestcase);
        if (Objects.isNull(result)){
            return  ResultDto.fail("未查询相关用例");
        }
        return ResultDto.success("成功",result);
    }

    /***
     * 根据id删除测试用例
     *
      * @param caseId
     * @param createUserId
     * @return
     */
    @Override
    public ResultDto<ZcTestCase> deleteById(Integer caseId, Integer createUserId) {
        ZcTestCase queryZctestcase = new ZcTestCase();   //通过查询条件
        queryZctestcase.setId(caseId);
        queryZctestcase.setCreateUserId(createUserId);
        queryZctestcase.setDelFlag(UserConstants.DEL_FLAG_ONE);
        // 查询数据
        ZcTestCase result = zcTestCaseMapper.selectOne(queryZctestcase);

        if (Objects.isNull(result)){
            return  ResultDto.fail("未查询相关用例");
        }
        // 软删除
        result.setDelFlag(UserConstants.DEL_FLAG_ZERO);
        zcTestCaseMapper.updateByPrimaryKey(result);

        return ResultDto.success("成功");
    }
}
